package com.btl.service.ai.support.query;

import dev.langchain4j.model.input.Prompt;
import dev.langchain4j.model.input.PromptTemplate;
import dev.langchain4j.rag.query.Query;

import java.util.Map;

public class SystemAndUserMessageTransformer {

    /**
     * 聊天记录上下文
     */
    private final String context;

    public static String SYSTEM_ANALYZE_MESSAGE = """
             你是一个专业的销售顾问，擅长根据客户和客服的聊天记录，判断客户目前所处的销售阶段，并根据其行为和表达判断客户重要的程度。
             销售阶段请只从以下四个中选择：【初始接触、沟通中、有意向、已成交】；
             客户价值请只从以下四个中选择：【其他、一般、重要、核心】；
             分析应基于聊天内容，不需要重复聊天内容，保持简洁、清晰。
            """;

    public static String SALE_ANALYZE_SYSTEM_MESSAGE = """
                    你是一个用户信息抽取专家，擅长从客户与客服的聊天记录中提取用户的关键信息。
                    你的任务是根据聊天内容，识别出客户的姓名、年龄、电话、性别，并使用 JSON 格式返回：
                    {
                      "name": "客户姓名",
                      "age": "年龄（如无法判断则为 null）",
                      "phone": "电话（如无法判断则为 null）",
                      "gender": "性别（如无法判断则为 null）"
                    }
                    如果内容中未明确提及某项信息，请将该字段设置为 null。
            """;
    public static final PromptTemplate SALE_ANALYZE_PROMPT_TEMPLATE = PromptTemplate.from(
            """
                     以下是客户与客服的完整对话内容：\
                      {{context}}\
                      请根据这段对话，判断客户当前所处的销售阶段，并评估客户的价值等级。\
                      只输出以下三部分：\
                      1. 销售阶段：【初始接触、沟通中、有意向、已成交】\
                      2. 客户价值：【其他、一般、重要、核心】\
                      3. 分析理由（简洁，不重复对话）\
                      特殊处理：\
                      1. 如果客户与客服的对话内容为空，提示没有有效的聊天记录\
                    """
    );
    public static final PromptTemplate PORTRAIT_ANALYZE_PROMPT_TEMPLATE = PromptTemplate.from(
            """
                     客户和客服的聊天记录:
                     {{context}}
                     根据客户聊天记录和历史对话，帮我完成以下 1 个任务 \
                     1、提取客户姓名，年龄，电话，性别。要求用json格式回复 \
                     特殊处理：\
                     1. 如果客户与客服的对话内容为空，提示没有有效的聊天记录\
                    """
    );

    public static final PromptTemplate NORMAL_ANALYZE_PROMPT_TEMPLATE = PromptTemplate.from(
            """
                     以下是客户与客服的完整对话内容：\
                      {{context}}\
                     请根据这段对话，使用你的专业知识分析客户，回答用户的问题\
                     特殊处理：\
                     1. 如果客户与客服的对话内容为空，提示没有有效的聊天记录\
                    """
    );

    public SystemAndUserMessageTransformer(String context) {
        this.context = context;
    }

    public Message transform(Query query) {
        if (query.text()
                .equals("自动分析销售线索")) {
            Prompt userMessage = SALE_ANALYZE_PROMPT_TEMPLATE.apply(Map.of("context", context));
            return new Message(SYSTEM_ANALYZE_MESSAGE, userMessage.text());
        }
        if (query.text()
                .equals("自动生成画像结果")) {
            Prompt userMessage = PORTRAIT_ANALYZE_PROMPT_TEMPLATE.apply(Map.of("context", context));
            return new Message(SALE_ANALYZE_SYSTEM_MESSAGE, userMessage.text());
        }
        Prompt userMessage = NORMAL_ANALYZE_PROMPT_TEMPLATE.apply(Map.of("context", context));
        return new Message("你是一个专业的销售顾问，擅长客户分析，销售统计、客户规划等能力", userMessage.text());
    }

    public record Message(String systemMessage, String userMessage) {
    }
}
